import request from '@/utils/request'

/**
 * AI智能搜题相关API
 */

/**
 * 拍照搜题一体化功能
 * @param {Object} data - 搜题数据
 * @param {number} data.userId - 用户ID
 * @param {File} data.imageFile - 图片文件
 * @param {string} data.sessionName - 会话名称（可选）
 * @param {boolean} data.enableVoice - 是否启用语音播报
 */
export function integratedSearch(data) {
  const formData = new FormData()
  formData.append('userId', data.userId)
  formData.append('imageFile', data.imageFile)

  if (data.sessionName) {
    formData.append('sessionName', data.sessionName)
  }

  if (data.enableVoice !== undefined) {
    formData.append('enableVoice', data.enableVoice)
  }

  return request({
    url: '/ai-tutor/integrated-search',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    },
    timeout: 120000 // 增加超时时间到2分钟
  })
}

/**
 * 拍照搜题（Base64格式）
 * @param {Object} data - 搜题数据
 * @param {string} data.imageData - Base64编码的图片数据
 * @param {number} data.userId - 用户ID
 */
export function searchByImage(data) {
  // 将Base64转换为File对象
  const base64Data = data.imageData.split(',')[1]
  const byteCharacters = atob(base64Data)
  const byteNumbers = new Array(byteCharacters.length)

  for (let i = 0; i < byteCharacters.length; i++) {
    byteNumbers[i] = byteCharacters.charCodeAt(i)
  }

  const byteArray = new Uint8Array(byteNumbers)
  const file = new File([byteArray], 'search_image.jpg', { type: 'image/jpeg' })

  return integratedSearch({
    userId: data.userId || 1,
    imageFile: file,
    sessionName: data.sessionName || '搜题会话',
    enableVoice: false
  })
}

/**
 * 文本搜题
 * @param {Object} data - 搜题数据
 * @param {string} data.question - 题目文本
 * @param {number} data.userId - 用户ID
 */
export function searchByText(data) {
  // 文本搜题通过AI对话接口实现
  return aiChat({
    message: `请帮我解答这道题目：${data.question}`,
    userId: data.userId || 1
  })
}

/**
 * AI聊天（简单版本）
 * @param {Object} data - 聊天数据
 * @param {string} data.message - 消息内容
 * @param {string} data.imageData - 图片数据（可选）
 */
export function aiChat(data) {
  // 如果包含图片数据，使用JSON格式发送
  if (data.imageData) {
    return request({
      url: '/ai-tutor/chat',
      method: 'post',
      data: {
        message: data.message,
        imageData: data.imageData
      }
    })
  }

  // 纯文本消息使用URL参数格式
  return request({
    url: '/ai-tutor/chat',
    method: 'post',
    params: {
      message: data.message
    }
  })
}

/**
 * AI对话（带用户ID）
 * @param {Object} data - 对话数据
 * @param {number} data.userId - 用户ID
 * @param {string} data.message - 消息内容
 * @param {boolean} data.enableVoice - 是否启用语音播报
 */
export function chatWithUser(data) {
  const params = {
    userId: data.userId,
    message: data.message
  }

  if (data.enableVoice !== undefined) {
    params.enableVoice = data.enableVoice
  }

  return request({
    url: '/ai-tutor/chat-with-user',
    method: 'post',
    params: params
  })
}

/**
 * 继续对话（支持上下文）
 * @param {Object} data - 对话数据
 * @param {number} data.userId - 用户ID
 * @param {number} data.sessionId - 会话ID
 * @param {string} data.message - 消息内容
 * @param {boolean} data.enableVoice - 是否启用语音播报
 */
export function continueConversation(data) {
  const params = {
    userId: data.userId,
    sessionId: data.sessionId,
    message: data.message
  }

  if (data.enableVoice !== undefined) {
    params.enableVoice = data.enableVoice
  }

  return request({
    url: '/ai-tutor/continue-conversation',
    method: 'post',
    params: params
  })
}

/**
 * AI对话（支持前端会话ID和上下文）
 * @param {Object} data - 对话数据
 * @param {number} data.userId - 用户ID
 * @param {string} data.sessionId - 前端会话ID
 * @param {string} data.message - 消息内容
 * @param {boolean} data.enableVoice - 是否启用语音播报
 */
export function chatWithSession(data) {
  const params = {
    userId: data.userId,
    message: data.message
  }

  if (data.sessionId) {
    params.sessionId = data.sessionId
  }

  if (data.enableVoice !== undefined) {
    params.enableVoice = data.enableVoice
  }

  return request({
    url: '/ai-tutor/chat-with-session',
    method: 'post',
    params: params
  })
}

// ==================== 会话管理API ====================

/**
 * 获取用户会话列表
 * @param {number} userId - 用户ID
 * @param {number} limit - 限制数量
 */
export function getUserSessions(userId, limit = 10) {
  return request({
    url: '/ai-tutor/sessions',
    method: 'get',
    params: { userId, limit }
  })
}

/**
 * 创建新会话
 * @param {Object} data - 会话数据
 * @param {number} data.userId - 用户ID
 * @param {string} data.title - 会话标题
 */
export function createSession(data) {
  const params = {
    userId: data.userId
  }

  if (data.title) {
    params.title = data.title
  }

  return request({
    url: '/ai-tutor/sessions',
    method: 'post',
    params: params
  })
}

/**
 * 删除会话
 * @param {Object} data - 删除数据
 * @param {number} data.userId - 用户ID
 * @param {string} data.sessionId - 会话ID
 */
export function deleteSession(data) {
  return request({
    url: `/ai-tutor/sessions/${data.sessionId}`,
    method: 'delete',
    params: { userId: data.userId }
  })
}

/**
 * 获取会话消息
 * @param {Object} data - 查询数据
 * @param {number} data.userId - 用户ID
 * @param {string} data.sessionId - 会话ID
 */
export function getSessionMessages(data) {
  return request({
    url: `/ai-tutor/sessions/${data.sessionId}/messages`,
    method: 'get',
    params: { userId: data.userId }
  })
}

/**
 * OCR图片识别
 * @param {Object} data - 识别数据
 * @param {string} data.imageData - Base64编码的图片数据
 */
export function ocrImage(data) {
  return request({
    url: '/ai-tutor/ocr',
    method: 'post',
    data: {
      imageData: data.imageData
    },
    headers: {
      'Content-Type': 'application/json'
    }
  })
}

/**
 * 生成相似题目
 * @param {Object} data - 题目数据
 * @param {string} data.questionText - 题目文本
 * @param {number} data.count - 生成数量
 */
export function generateSimilarQuestions(data) {
  const formData = new FormData()
  formData.append('questionText', data.questionText)

  if (data.count) {
    formData.append('count', data.count)
  }

  return request({
    url: '/ai-tutor/generate-similar',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 获取搜题历史
 * @param {number} userId - 用户ID
 */
export function getSearchHistory(userId) {
  return request({
    url: `/ai-tutor/search-history/${userId}`,
    method: 'get'
  })
}
